Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ


Displaying Rendered β€’ View raw β€’ Download

specs/20260520-153449-node-list-context-menu/plan.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 4.55 KB

Implementation Plan: Node List Context Menu Alignment

Branch: T383838jamesarich/issue-5544-alignment-align-node-list-long-press-co-1d63b1 | Date: 2025-05-20 | Spec: T383838specs/20260520-153449-node-list-context-menu/spec.md
Input: Feature specification from T383838/specs/20260520-153449-node-list-context-menu/spec.md

Summary

Reorder the node list long-press context menu to canonical order (Favorite β†’ Mute notifications β†’ Message β†’ Trace Route β†’ Ignore β†’ Remove), add two new menu items (Message, Trace Route), rename "Mute Always" to "Mute notifications", and suppress the context menu for the local node. All changes are scoped to T383838commonMain source sets in the T383838feature:node module with new string resources in T383838core:resources.

Technical Context

Language/Version: Kotlin 2.3+ targeting JDK 21
Primary Dependencies: Compose Multiplatform (M3 Expressive), Koin 4.2+, Navigation 3
Storage: N/A (no persistence changes)
Testing: T383838./gradlew :feature:node:allTests (KMP common tests)
Target Platform: Android + Compose Desktop (KMP)
Project Type: Mobile app (KMP multiplatform)
Performance Goals: Context menu appearance < 300ms (NFR-001)
Constraints: No platform-specific code; all logic in T383838commonMain
Scale/Scope: 3 files modified, 2 new composable functions, 2 new string resources

Constitution Check

GATE: βœ… PASSED β€” all seven principles satisfied.

β€’ I. Kotlin Multiplatform Core: βœ… All changes are in T383838commonMain source sets only:
β€’ T383838feature/node/src/commonMain/.../component/NodeContextMenu.kt β€” reorder + add items
β€’ T383838feature/node/src/commonMain/.../list/NodeListScreen.kt β€” wire new callbacks
β€’ T383838feature/node/src/commonMain/.../list/NodeListViewModel.kt β€” add message/traceroute methods
β€’ T383838core/resources/src/commonMain/composeResources/values/strings.xml β€” add T383838trace_route string
β€’ No T383838androidMain/T383838jvmMain changes required.

β€’ II. Zero Lint Tolerance: βœ… Verification commands:
T282828
./gradlew spotlessApply spotlessCheck detekt :feature:node:allTests :core:resources:allTests

β€’ III. Compose Multiplatform UI: βœ… Uses Compose Multiplatform T383838DropdownMenu/T383838DropdownMenuItem with T383838leadingIcon pattern (M3 Expressive). No navigation changes (menu actions invoke callbacks). No floats displayed.

β€’ IV. Privacy First: βœ… No PII/location/crypto exposure. No new logging. T383838core/proto not modified.

β€’ V. Design Standards Compliance: βœ… Menu order matches the cross-platform Menu Alignment Audit canonical order. This feature directly implements the upstream behavior spec (Issue #5544 references the cross-platform design standard).

β€’ VI. Documentation Freshness: βœ… No user-facing documentation pages affected. Context menu is a UI interaction, not a documented feature page.

β€’ VII. Verify Before Push: βœ… Commands:
T282828
./gradlew spotlessApply spotlessCheck detekt assembleDebug :feature:node:allTests
gh pr checks <PR>

Project Structure

Documentation (this feature)

T282828
specs/20260520-153449-node-list-context-menu/
β”œβ”€β”€ plan.md # This file
β”œβ”€β”€ research.md # Phase 0 output
β”œβ”€β”€ data-model.md # Phase 1 output
β”œβ”€β”€ quickstart.md # Phase 1 output
β”œβ”€β”€ contracts/ # Phase 1 output (UI contract)
└── tasks.md # Phase 2 output (/speckit.tasks command)

Source Code (repository root)

T282828
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/
β”œβ”€β”€ component/
β”‚ └── NodeContextMenu.kt # Reorder items, add MessageMenuItem + TraceRouteMenuItem
β”œβ”€β”€ list/
β”‚ β”œβ”€β”€ NodeListScreen.kt # Wire onMessage + onTraceRoute callbacks
β”‚ └── NodeListViewModel.kt # Add traceRoute() + getDirectMessageRoute() methods
└── detail/
└── NodeRequestActions.kt # Already has requestTraceroute (reuse)

core/resources/src/commonMain/composeResources/values/
└── strings.xml # Add "trace_route" string; use existing "message", "mute_notifications"

feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/
└── component/
└── NodeContextMenuTest.kt # New: verify menu order + disabled states

Structure Decision: KMP multiplatform feature module structure. All business logic and UI in T383838commonMain source set per Constitution Β§I.

Complexity Tracking

β”‚ No violations. All gates pass without exception.

Served by rngit 1.5.0 - Generated in 0.09s